using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._Cartography._Features
{
    /// <summary>
    /// <para>Identify Contours</para>
    /// <para>Identifies types of contours and applies hypsographic codes to input features.</para>
    /// <para>识别轮廓类型并将催眠代码应用于输入特征。</para>
    /// </summary>    
    [DisplayName("Identify Contours")]
    public class IdentifyContours : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public IdentifyContours()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_contour_features">
        /// <para>Input Contours</para>
        /// <para>The input contours that will be updated with the specified contour codes.</para>
        /// <para>将使用指定等值线代码更新的输入等值线。</para>
        /// </param>
        /// <param name="_in_rasters">
        /// <para>Input Rasters</para>
        /// <para>The rasters used to derive elevations of points inside contours to correctly identify the types of contours.</para>
        /// <para>用于派生等值线内点的高程以正确识别等值线类型的栅格。</para>
        /// </param>
        /// <param name="_contour_height_field">
        /// <para>Contour Height field</para>
        /// <para>The field in the input contour feature class that contains elevation values. This field type must be numeric.</para>
        /// <para>输入等值线要素类中包含高程值的字段。此字段类型必须为数值。</para>
        /// </param>
        /// <param name="_contour_code_field">
        /// <para>Contour Code field</para>
        /// <para>The field in the input contour feature class that will be updated with the appropriate domain code.</para>
        /// <para>输入等值线要素类中的字段，将使用相应的属性域代码进行更新。</para>
        /// </param>
        public IdentifyContours(object _in_contour_features, List<object> _in_rasters, object _contour_height_field, object _contour_code_field)
        {
            this._in_contour_features = _in_contour_features;
            this._in_rasters = _in_rasters;
            this._contour_height_field = _contour_height_field;
            this._contour_code_field = _contour_code_field;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Identify Contours";

        public override string CallName => "topographic.IdentifyContours";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_contour_features, _in_rasters, _contour_height_field, _contour_code_field, _contour_index_interval, _index_code, _intermediate_code, _depression_code, _depression_intermediate_code, _updated_contour_features];

        /// <summary>
        /// <para>Input Contours</para>
        /// <para>The input contours that will be updated with the specified contour codes.</para>
        /// <para>将使用指定等值线代码更新的输入等值线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Contours")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_contour_features { get; set; }


        /// <summary>
        /// <para>Input Rasters</para>
        /// <para>The rasters used to derive elevations of points inside contours to correctly identify the types of contours.</para>
        /// <para>用于派生等值线内点的高程以正确识别等值线类型的栅格。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Rasters")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_rasters { get; set; }


        /// <summary>
        /// <para>Contour Height field</para>
        /// <para>The field in the input contour feature class that contains elevation values. This field type must be numeric.</para>
        /// <para>输入等值线要素类中包含高程值的字段。此字段类型必须为数值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour Height field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _contour_height_field { get; set; }


        /// <summary>
        /// <para>Contour Code field</para>
        /// <para>The field in the input contour feature class that will be updated with the appropriate domain code.</para>
        /// <para>输入等值线要素类中的字段，将使用相应的属性域代码进行更新。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour Code field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _contour_code_field { get; set; }


        /// <summary>
        /// <para>Contour Index Interval</para>
        /// <para>The interval or distance between index contour lines. The default is 100.</para>
        /// <para>索引等值线之间的间隔或距离。默认值为 100。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Contour Index Interval")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long _contour_index_interval { get; set; } = 100;


        /// <summary>
        /// <para>Index Code</para>
        /// <para>The value used to populate the Contour Code field parameter when index contours are identified. The default is 1.</para>
        /// <para>标识索引等值线时用于填充等值线代码字段参数的值。默认值为 1。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Index Code")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _index_code { get; set; } = null;


        /// <summary>
        /// <para>Intermediate Code</para>
        /// <para>The value used to populate the Contour Code field parameter when intermediate contours are identified. The default is 2.</para>
        /// <para>用于在标识中间等值线时填充“等值线代码”字段参数的值。默认值为 2。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Intermediate Code")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _intermediate_code { get; set; } = null;


        /// <summary>
        /// <para>Depression Code</para>
        /// <para>The value used to populate the Contour Code field parameter when depression contours are identified. The default is 5.</para>
        /// <para>用于在识别凹陷等值线时填充等值线代码字段参数的值。默认值为 5。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Depression Code")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _depression_code { get; set; } = null;


        /// <summary>
        /// <para>Depression Intermediate Code</para>
        /// <para>The value used to populate the Contour Code field parameter when depression intermediate contours are identified. The default is 6.</para>
        /// <para>用于在识别凹陷中间等值线时填充等值线代码字段参数的值。默认值为 6。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Depression Intermediate Code")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _depression_intermediate_code { get; set; } = null;


        /// <summary>
        /// <para>Updated Contours</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Contours")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_contour_features { get; set; }


        public IdentifyContours SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}